/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.DAO;

import com.DAO.ConexaoPostgreSQL.ConnectionFactory;
import com.Model.AcervoCampo;
import com.Model.Campo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Fellipe
 */
public class AcervoCampoDAO {

    private Connection con = new ConnectionFactory().getConnection();
    private PreparedStatement pstm;

    public void create(AcervoCampo ac) {

        int chaveCampo = ac.getChaveCampo();
        int chaveAcervo = ac.getChaveAcervo();
        int ativo = 1;
        String valorPadrao = null;
        if (!ac.getValorPadrao().isEmpty()) {
            valorPadrao = ac.getValorPadrao();
        }
        String apresentacao = null;
        if (!ac.getApresentacao().isEmpty()) {
            apresentacao = ac.getApresentacao();
        }
        String restricao = null;
        if (!ac.getRestricao().isEmpty()) {
            restricao = ac.getRestricao();
        }
        String subcampos = null;
//                if (!ac.getSubcampos().isEmpty()) {
//                    subcampos = "'" + ac.getSubcampos() + "'";
//                }
        int repetitivo = (ac.getRepetitivo()) ? 1 : 0;
        int obrigatorio = (ac.getObrigatorio()) ? 1 : 0;
        int chaveMetadado = 0;
//        int chaveMetadado = (ac.getChaveMetadado()) ? 1 : 0;
        int publicar = (ac.getPublicar()) ? 1 : 0;
        int nivelAcesso = 0;
//        int nivelAcesso = ac.getNivelAcesso();
        int sequencia = ac.getSequencia();
        Campo c = ac.getCampo();

        try {

            String sql = "INSERT INTO acervocampos VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
            pstm = con.prepareStatement(sql);
            pstm.setInt(1, chaveCampo);
            pstm.setInt(2, chaveAcervo);
            pstm.setInt(3, repetitivo);
            pstm.setInt(4, obrigatorio);
            pstm.setString(5, valorPadrao);
            pstm.setInt(6, nivelAcesso);
            pstm.setInt(7, sequencia);
            pstm.setString(8, apresentacao);
            pstm.setString(9, restricao);
            pstm.setInt(10, chaveMetadado);
            pstm.setInt(11, publicar);
            pstm.setString(12, subcampos);
            pstm.execute();

        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pstm.close();
                con.close();
            } catch (SQLException ex) {
                System.out.println("Não foi possivel terminar a conexão " + ex);
            }
        }

    }

    public List<AcervoCampo> read(String chave) {

        List<AcervoCampo> listaAcervoCampo = new ArrayList<AcervoCampo>();

        try {

            String sql = "SELECT * FROM acervocampos WHERE chaveacervo = ?";
            pstm = con.prepareStatement(sql);
            pstm.setInt(1, Integer.parseInt(chave));
            ResultSet rs = pstm.executeQuery();

            while (rs.next()) {

                AcervoCampo ac = new AcervoCampo();

                ac.setApresentacao(rs.getString("apresentacao"));
                ac.setNivelAcesso(rs.getInt("niveldeacesso"));
                ac.setChaveMetadado(rs.getBoolean("chavemetadado"));
                ac.setObrigatorio(rs.getBoolean("obrigatorio"));
                ac.setPublicar(rs.getBoolean("publicar"));
                ac.setRepetitivo(rs.getBoolean("repetitivo"));
                ac.setRestricao(rs.getString("restricao"));
                ac.setSequencia(rs.getInt("sequencia"));
                ac.setSubcampos(rs.getString("subcampos"));
                ac.setValorPadrao(rs.getString("valorPadrao"));
                ac.setChaveCampo(rs.getInt("chavecampo"));
                ac.setChaveAcervo(rs.getInt("chaveacervo"));
                ac.setCampo(new CampoDAO().read(ac.getChaveCampo()));

                listaAcervoCampo.add(ac);

            }

        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pstm.close();
                con.close();
            } catch (SQLException ex) {
                System.out.println("Não foi possivel terminar a conexão " + ex);
            }
        }

        return listaAcervoCampo;

    }

    public void update(AcervoCampo ac) {

        int chaveCampo = ac.getChaveCampo();
        int chaveAcervo = ac.getChaveAcervo();
        int ativo = 1;
        String valorPadrao = null;
        if (!ac.getValorPadrao().isEmpty()) {
            valorPadrao = ac.getValorPadrao();
        }
        String apresentacao = null;
        if (!ac.getApresentacao().isEmpty()) {
            apresentacao = ac.getApresentacao();
        }
        String restricao = null;
        if (!ac.getRestricao().isEmpty()) {
            restricao = ac.getRestricao();
        }
        String subcampos = null;
//                if (!ac.getSubcampos().isEmpty()) {
//                    subcampos = "'" + ac.getSubcampos() + "'";
//                }
        int repetitivo = (ac.getRepetitivo()) ? 1 : 0;
        int obrigatorio = (ac.getObrigatorio()) ? 1 : 0;
        int chaveMetadado = (ac.getChaveMetadado()) ? 1 : 0;
        int publicar = (ac.getPublicar()) ? 1 : 0;
        int nivelAcesso = ac.getNivelAcesso();
        int sequencia = ac.getSequencia();
        Campo c = ac.getCampo();

        try {

            String sql = "SELECT * FROM acervocampos WHERE chavecampo = ? AND chaveacervo = ?";
            pstm = con.prepareStatement(sql);
            pstm.setInt(1, chaveCampo);
            pstm.setInt(2, chaveAcervo);
            ResultSet rs = pstm.executeQuery();

            if (rs.next()) {
                
                sql = "UPDATE acervocampos SET repetitivo = ?, obrigatorio = ?, valorPadrao = ?, niveldeacesso = ?, sequencia = ?, apresentacao = ?, restricao = ?, chavemetadado = ?, publicar = ?, subcampos = ? WHERE chaveacervo = ? AND chavecampo = ?";
                pstm = con.prepareStatement(sql);
                pstm.setInt(1, repetitivo);
                pstm.setInt(2, obrigatorio);
                pstm.setString(3, valorPadrao);
                pstm.setInt(4, nivelAcesso);
                pstm.setInt(5, sequencia);
                pstm.setString(6, apresentacao);
                pstm.setString(7, restricao);
                pstm.setInt(8, chaveMetadado);
                pstm.setInt(9, publicar);
                pstm.setString(10, subcampos);
                pstm.setInt(11, chaveAcervo);
                pstm.setInt(12, chaveCampo);
                pstm.execute();
                
            } else {

                sql = "INSERT INTO acervocampos VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )";
                pstm = con.prepareStatement(sql);
                pstm.setInt(1, chaveCampo);
                pstm.setInt(2, chaveAcervo);
                pstm.setInt(3, repetitivo);
                pstm.setInt(4, obrigatorio);
                pstm.setString(5, valorPadrao);
                pstm.setInt(6, nivelAcesso);
                pstm.setInt(7, sequencia);
                pstm.setString(8, apresentacao);
                pstm.setString(9, restricao);
                pstm.setInt(10, chaveMetadado);
                pstm.setInt(11, publicar);
                pstm.setString(12, subcampos);
                pstm.setInt(13, ativo);
                pstm.execute();

            }

        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pstm.close();
                con.close();
            } catch (SQLException ex) {
                System.out.println("Não foi possivel terminar a conexão " + ex);
            }
        }

    }

    public void delete(int chaveAcervo) {
        
        try {
            
            String sql = "UPDATE acervocampos SET ativo = ? WHERE chaveacervo = ?";
            pstm = con.prepareStatement(sql);
            pstm.setString(1, "0");
            pstm.setInt(2, chaveAcervo);
            pstm.execute();
            
        } catch (SQLException ex) {
            System.out.println(ex);
        } finally {
            try {
                pstm.close();
                con.close();
            } catch (SQLException ex) {
                System.out.println("Não foi possivel terminar a conexão " + ex);
            }
        }
        
    }
}
